<?php
namespace Module\Controller;

use Admin\Model\ModulesModel;
use Common\Common\CommonController;

class MangerController extends CommonController
{
    /**
     * 模块设计
     */
    public function design()
    {
        if (IS_POST) {
//            dd(I('post.'));die;
//           检测是否为空
            if ($this->notnull(I('post.name'))) {
                $this->error('请输入模块名字');
                die;
            }
            if ($this->notnull(I('post.name'))) {
                $this->error('请输入模块标识');
                die;
            }
            if ($this->notnull(I('post.action'))) {
                $this->error('请输入模块动作');
                die;
            }
            //检测标识是否为英文
            if ($this->isAllEn(I('post.title'))) {
                $this->error('请输入全为英文的标识');
                die;
            }
            if (IS_POST) {
//                1,创建模块所在的目录
                $dir = $this->createdir(I('post.title'));
//               2,更改公共模板的内容，并将其写入模块
                $this->updatecon(I('post.title'), $dir);
//               3，将模块信息记入缓存文件
                $this->wrireInfo(I('post.'), $dir);
                $this->success('添加模块成功');die;
            }
        }
        $this->display();
    }

    /**
     * 显示列表
     */
     public  function lists(){

           $file=glob('Addons/*');
         $modules=[];
         foreach($file as $k=>$v){
             if(file_exists($v.'/moduleinfo.php')){
               $modules[]=include $v.'/moduleinfo.php';
             }
         }
         //查数据库，看该模块是否已经装载
         $has=M('modules')->getField('title',true);
         $this->assign('has',$has);
         $this->assign('modules',$modules);
         $this->display();
     }

    /**
     * 安装模块
     */
    public  function install(){
        $title=ucfirst(I('get.title'));
        $module=include 'Addons/'.$title.'/moduleinfo.php';
        $module['action']=json_encode($module['action'],JSON_UNESCAPED_UNICODE);
//         dd($module);die;
        $tie=I('get.title');
        if(!M('modules')->where("title='{$tie}'")->find()){
            $res=(new ModulesModel())->store($module);
            if($res){
                $this->success('装载成功');die;
            }else{
                $this->error('装载失败');
            }
        }else{
            $this->error('对不起该模块已经装载');
        }




    }
    /**
     * 卸载模块
     */
    public  function uninstall(){
        $title=I('get.title');
        $res=M('modules')->where("title='$title'")->delete();
        if($res){
            $this->success('卸载成功');die;
        }else{
            $this->error('卸载失败');die;
        }
    }
    //创建模块所在目录
    private function  createdir($dir)
    {
        $dir = "Addons/" . ucfirst($dir);
        if (is_dir($dir)) {
            $this->error('该模块已经存在');
            die;
        } else {
            mkdir($dir, 0777, true);
            return $dir;
        }
    }

    //更改公共文件的内容,并将其写入改模块下面
    private function updatecon($title, $dir)
    {
        //site入口处理
        $site = file_get_contents('./Resource/Module/Site.php');
        $site = str_replace('{NAME}', $title, $site);
        file_put_contents($dir . "/Site.php", $site);
        //web入口处理
        $web = file_get_contents('./Resource/Module/Web.php');
        $web = str_replace('{NAME}', $title, $web);
        file_put_contents($dir . "/Web.php", $site);
    }


    //将模块信息写入缓存文件
    private function wrireInfo($data, $dir)
    {
        //获取缓存文件的名字
        $filename = $dir . "/moduleinfo.php";
        $str = [
            'name'=>$data['name'],
            'title'=>$data['title'],
            'iswechat'=>$data['iswechat'],
        ];
        //添加动作
        $action=$data['action'];
        $action=preg_split('/(\r|\n)/',$action);
        $action=array_filter($action);
        foreach($action as $k=>$v){
            $arr[]=explode('|',$v);
        }
        foreach($arr as $k=>$v){
            $str['action'][$k]=[
                'actionName'=>$v[0],
                'actionTitle'=>$v[1],
            ];
        }
//        dd($str);die;
//        将组合的信息写入模块信息文件
        file_put_contents($filename,"<?php\r\n return ".var_export($str,true)."; ?>");
    }


}